/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-06-14 18:37:52 +0000 (Thu, 14 Jun 2012) $
  Revision     : $Revision: 92 $
*******************************************/

package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;

import mensaje.Mensaje;
import utilidad.IPropiedades;

/**
 * Panel contenedor de botones.
 * 
 * @author jose.lara 06.06.2012
 */
public class BotonesPanel extends JPanel {
    private static final long serialVersionUID = -257397926145931863L;
    
    private JButton aceptarBoton                        = null;
    private JButton cancelarBoton                       = null;
    private JButton guardarBoton                        = null;
    private JButton guardarCerrarBoton                  = null;
    private int botones                                 = -1;
    
    private static final int INDEFINIDO                 = -1000;
    public static final int ACEPTAR                     = 0x0000000000000001;
    public static final int CANCELAR                    = 0x0000000000000002;
    public static final int GUARDAR                     = 0x0000000000000004;
    public static final int GUARDAR_CERRAR              = 0x0000000000000008;
    
    public static final int BOTONES_ACEPTAR_CANCELAR    = ACEPTAR | CANCELAR;
    public static final int BOTONES_GUARDAR_CANCELAR    = GUARDAR | CANCELAR;
    public static final int BOTONES_GUARDAR_CANCELAR_GUARDAR_CERRAR = GUARDAR | CANCELAR | GUARDAR_CERRAR; 

    public BotonesPanel(int botones) {
      super();
      setBorder(new BevelBorder(BevelBorder.LOWERED));
      setBotones(botones);
      agregarBotones();
    }
    
    private void agregarBotones() {
      if(getBotones() > 0) {
        if((getBotones() & ACEPTAR) == ACEPTAR) {
          add(inicializarAceptarBoton());
        }
        if((getBotones() & CANCELAR) == CANCELAR) {
          add(inicializarCancelarBoton());
        }
        if((getBotones() & GUARDAR) == GUARDAR) {
            add(inicializarGuardarBoton());
        }
        if((getBotones() & GUARDAR_CERRAR) == GUARDAR_CERRAR) {
            add(inicializarCerrarBoton());
        }
      }
    }
    
    private int getBotones() {
      return botones;
    }
    
    private void setBotones(int botones) {
      this.botones = botones;
    }
    
    private JButton inicializarAceptarBoton() {
        if(aceptarBoton == null) {
            aceptarBoton = new JButton(Mensaje.getMensaje("BOTON_ACEPTAR"));
            aceptarBoton.addActionListener(new BotonPresionadoListener(ACEPTAR));
        }
        
        return aceptarBoton;
      }
    
    private JButton inicializarCancelarBoton() {
        if(cancelarBoton == null) {
            cancelarBoton = new JButton(Mensaje.getMensaje("BOTON_CANCELAR"));
            cancelarBoton.addActionListener(new BotonPresionadoListener(CANCELAR));
        }
        
        return cancelarBoton;
    }
    
    private JButton inicializarGuardarBoton() {
        if(guardarBoton == null) {
            guardarBoton = new JButton(Mensaje.getMensaje("BOTON_GUARDAR"));
            guardarBoton.addActionListener(new BotonPresionadoListener(GUARDAR));
        }
        
        return guardarBoton;
    }
    
    private JButton inicializarCerrarBoton() {
        if(guardarCerrarBoton == null) {
            guardarCerrarBoton = new JButton(Mensaje.getMensaje("BOTON_GUARDAR-CERRAR"));
            guardarCerrarBoton.addActionListener(new BotonPresionadoListener(GUARDAR_CERRAR));
        }
        
        return guardarCerrarBoton;
    }
    
    protected void notificarBotonPresionado(int boton) {
        firePropertyChange(IPropiedades.BOTON_PRESIONADO, INDEFINIDO, boton);
    }
    
    /**
     * Clase interna que maneja el evento de boton presionado.
     * 
     * @author jose.lara 08.06.2012
     */
    private final class BotonPresionadoListener implements ActionListener {
        private int botonPresionado = INDEFINIDO; 
        
        private BotonPresionadoListener(int botonPresionado) {
            this.botonPresionado = botonPresionado;
        }
        
        @Override
        public void actionPerformed(ActionEvent e) {
            notificarBotonPresionado(botonPresionado);
        }
}
    
    public JButton getGuardarBoton() {
        return guardarBoton;
    }
    
    public JButton getGuardarCerrarBoton() {
        return guardarCerrarBoton;
    }
}